SPSS 时间变量教程

作者:Ruben Geert van den Berg,原文链接:SPSS Date & Time Variables

在您对 SPSS 的时间变量有了扎实的理解之后,您可能会发现对它们进行计算非常容易。本教程将演示 SPSS 的主要时间函数。此外,我们还会展示很多时候我们甚至不需要使用这些函数也能完成任务。

在本教程中,请记住 SPSS 的时间变量包含以秒为单位的时间跨度,这些时间跨度可能表示也可能不表示时钟时间。其次,时间变量是数值变量,因此所有数值函数都可以应用于它们。

我们鼓励您亲自尝试我们将要演示的时间计算。您可以通过下载并打开 clock_card.sav 来做到这一点。

SPSS Data View 中的时间变量

SPSS 主要时间函数

SPSS 的大多数日期函数也适用于时间变量。在下面的表格中概述它们之后,我们将在本教程的其余部分更详细地了解它们。

函数 (Function) 用途 (Use) 示例 (Example) 返回值 (Returns)
DATEDIFF 计算两个时间之间的差,以给定的时间单位表示 DATEDIFF(time1,time2,'minutes') 标准数值 (Standard numeric value)
DATESUM 将给定的时间单位数添加到时间变量 DATESUM(time,8,'hours') 时间值 (Time value)
XDATE 从时间变量中提取时间分量 XDATE.HOURS(time) 标准数值 (Standard numeric value)
TIME.HMS 从小时、分钟、秒创建时间值 TIME.HMS(20,15,30) 时间值 (Time value)

SPSS DATEDIFF 函数

我们的数据包含员工使用打卡机记录的进入和退出时间。我们首先想知道他每天在办公室花了多少时间。 下面的 语法 (syntax) 展示了如何使用和不使用 DATEDIFF 来做到这一点。 屏幕截图显示了两个选项的结果。

SPSS 计算时间差示例

SPSS DATEDIFF 语法示例

***1. 计算以秒为单位的持续时间 (Compute duration in seconds)。**
compute duration_time = exit - entry.
exe.

***2. 以时间格式显示以秒为单位的持续时间 (Display duration in seconds as time)。**
formats duration_time(time8).

***3. 使用 DATEDIFF 计算以分钟为单位的持续时间 (Compute duration in minutes with DATEDIFF)。**
compute duration_minutes = datediff(exit,entry,'minutes').
exe.

***4. 隐藏小数位 (Hide decimals)。**
formats duration_minutes(f3).

SPSS Datediff 示例

SPSS DATESUM 函数

员工应该每天在办公室工作 8 小时。 也就是说,他们的进入时间应该是他们的退出时间减去 8 小时。 这种时间的减法(或加法)很容易通过使用 DATESUM 来完成。 然而,意识到小时由 3600 秒组成,我们可以通过普通的加法获得相同的结果,如第二个例子所示。

SPSS Datesum 示例

SPSS DATESUM 语法示例

***1. 计算目标进入时间 (entry_target)(离开前 8 小时),以秒为单位 (Compute entry_target (8 hours before leaving) in seconds)。**
compute entry_target = datesum(exit,-8,'hours').
exe.

***2. 以时间格式显示目标进入时间 (Display entry_target as time)。**
formats entry_target(time8).

***3. 用于计算目标退出时间 (exit_target)(进入后 8 小时)的 DATESUM 的替代方法 (Alternative to datesum for exit_target (8 hours after entry))。**
compute exit_target = entry + 3600 * 8.
exe.

***4. 以时间格式显示目标退出时间 (Display exit_target as time)。**
formats exit_target(time8).

SPSS XDATE 函数

员工应该在上午 10 点之前到达。 一种标记迟到条目的方法是使用 XDATE从进入时间中提取小时数XDATE 需要加上我们希望提取的时间单位作为后缀,例如 XDATE.HOURS。 最后,我们将使用 RECODE 将小时数重新编码为我们的标志变量。

SPSS Xdate 示例

SPSS XDATE 语法示例

***1. 从进入时间中提取小时数 (Extract hours from entry)。**
compute entry_hours = xdate.hours(entry).
exe.

***2. 标记进入时间 >= 10 的情况(迟到)(Flag cases where entry_hours >= 10 (late entry))。**
recode entry_hours(lo thru 9 = 0)(10 thru hi = 1) into late_entry.
exe.

SPSS TIME.HMS 函数

SPSS 时间变量保存秒数。 TIME.HMS 将小时、分钟和秒转换为秒数,因此可以从正常的时间分量创建 SPSS 时间值。

分钟和秒是可选的; 如果省略,它们将默认为零。 也就是说,TIME.HMS(10)TIME.HMS(10,0,0) 的简写形式,并返回 36,000(秒)。 我们可以通过将其格式设置为 TIME8 来将此值显示为 10:00:00。

下面的语法使用 TIME.HMS 作为标记迟到条目的另一种方式。

SPSS Time.Hms 示例

SPSS TIME.HMS 语法示例

***1. 计算截止进入时间 (entry_cutoff) 为上午 10 点 (Compute entry_cutoff as 10 AM)。**
compute entry_cutoff = time.hms(10,0,0).
exe.

***2. 以时间格式显示截止进入时间 (Display entry_cutoff as time)。**
formats entry_cutoff(time8).

***3. 在重新计算 `late_entry` 之前删除它 (Delete late_entry before recalculating it)。**
delete variables late_entry.

***4. 重新计算 `late_entry` (Recalculate late_entry)。**
if entry < entry_cutoff late_entry = 0.
if entry >= entry_cutoff late_entry = 1.
exe.

SPSS 时间比较

当我们意识到 SPSS 时间值只是以小时、分钟和秒显示的秒数时,SPSS 时间比较就非常简单了。 要将 SPSS 时间值与正常时间值(小时、分钟和秒)进行比较,只需将后者转换为秒。 TIME.HMS 正是做到了这一点。 接下来,只需使用 SPSS 的标准运算符,如 >、<= 等。

例如,员工不应在下午 4 点之前离开。 下面的语法显示了一个用于标记提早离开的超级简写。 不寻常的 COMPUTE 命令在 Compute A = B = C 中进行了解释。

SPSS 时间比较示例

SPSS 时间比较语法示例 1

***用于标记提早离开(下午 4 点之前)的超级简写 (Super shorthand for flagging early exits (before 4 PM))。**
compute early_exit = exit < time.hms(16).
exe.

SPSS 时间比较示例 2

因为 TIME.HMS 是一个函数,所以它可以被替换到其他函数中,特别是 RANGE。 以下示例显示了如何使用它来标记高峰时段的进入时间(从上午 8 点到 9 点)。

***使用 RANGE 标记上午 8 点到 9 点之间的进入时间 (Flag entry times between 8 and 9 with RANGE)。**
compute rush_hour_entry = range(entry,time.hms(8),time.hms(9)).
exe.

SPSS 时间比较示例

AGGREGATE 中的 SPSS 时间变量

这个最后的例子再次强调 SPSS 时间变量是数值变量,保存秒数,可以对其使用正常的数值函数

例如,员工应该每周工作 40 小时。 我们的数据在多大程度上满足了这一标准? 我们已经计算了 duration_time,这是一个保存秒数的时间变量。 我们可以简单地使用 AGGREGATE 每周对其求和。 这会产生每周的秒数,我们将通过将其格式设置为 TIME8 来将其显示为正常时间。

SPSS Aggregate 中的时间变量
***1. 计算每周在办公室的秒数 (Compute seconds in the office per week)。**
aggregate outfile *
/break week
/week_hours = sum(duration_time).

***2. 将秒数显示为小时、分钟、秒 (Show seconds as hours, minutes, seconds)。**
formats week_hours(time8).